Machine Learning (Week3)

在第三周的课程里,介绍了Logistic Regression - 逻辑斯谛回归问题,主要应用在Classification - 分类上。还有Regularization - 正则化,如何用来解决Overfitting - 过拟合问题。

Logistic Regression - 逻辑斯谛回归

Classification - 分类问题

分类在日常中用在很多地方,比如邮件是否垃圾邮件,肿瘤是否良性。通过给定的特征与对应的类别,我们可以训练出一个能够进行分类的算法。相应的,垃圾邮件的特征可以是某些关键词,比如推销类的;而肿瘤的特征可以是肿瘤大小或者别的什么(不懂就不胡说了)。
这时我们的结果$y$就是离散化的数字。

  • 如果是Binary Classification - 二分类问题,$y$可以离散化为$y = 0 or 1$,对应是/否大/小等抽象的结果。
  • 如果是Multiple Classification - 多分类问题,$y$可以离散化为元素个数为类别个数的向量。比如我们需要对某组数据进行分类,训练样本中一共有$n$类,当前训练样本的$y$是属于第$i$类的,则令$y = [0_{1},0_{2},\cdots,1_{i},\cdots,0_{n}]^{T}$ ,其中下标位置为对应类别。

这里我们先讨论Binary Classification - 二分类问题。同样先来个例子。

假如我们有一组肿瘤大小与其对应性质(良性/恶性)的数据,特征只有一个,就是肿瘤大小,$y=1$和 红色X点 代表恶性。如下图:

我们看到,假如我们用单纯的线性方程来拟合这组数据,按照图示定义,当$h_{\theta} = \theta^{T}x >0.5$ 时预测为恶性,则会与原数据误差较大。显然单纯的线性方程很难做到精准的分类。

我们尝试换一种思路。可以看到,两种类型的数据在某一$x$值上会有明显的区分。在$x$左边是良性的,在$x$右边是恶性的。于是我们做如下分析:

令分界点$x = \frac{-\theta_{0}}{\theta_{1}}$ ,则当$x > \frac{-\theta_{0}}{\theta_{1}}$ $\theta^{T}x = \theta_{0}+\theta_{1}x > 0$时,预测$y=1$,当$x < \frac{-\theta_{0}}{\theta_{1}}$ $\theta^{T}x = \theta_{0}+\theta_{1}x < 0$时,预测$y=0$。这样就能得到很好的分类效果。

同样的,多特征时也可以如此这般。比如两个特征时的情况:

因此我们只要一个函数$g(\theta^{T}x)$

  • $\theta^{T}x > 0$ 时,$g(\theta^{T}x) > 0.5$
  • $\theta^{T}x < 0$ 时,$g(\theta^{T}x) < 0.5$

最后令$h_{\theta}(x) = g(\theta^{T}x)$ ,就ok了。

Hypothesis Representation - 假设函数的表示

接着上面的问题。我们给出这样一个函数


$g(z) = \frac{1}{1+e^{-z}}$

它的图像如下

它满足下述性质

  • $z > 0$ 时,$g(z) > 0.5$
  • $z < 0$ 时,$g(z) < 0.5$

因此,我们只需令$\theta^{T}x = z$ ,即


$g(\theta^{T}x) = \frac{1}{1+e^{-\theta^{T}x}}$

则可得我们的假设函数


$h_{\theta}(x) = g(\theta^{T}x) = \frac{1}{1+e^{-\theta^{T}x}}$

这里$h_{\theta}(x)$ 实际上可以理解为如下


$h_{\theta}(x) = p(y = 1|x;\theta)$

即输入$x$ 的情况下,预测结果为$1$ 的概率为$h_{\theta}(x)$
比如说这是一个良性/恶性肿瘤的分类问题,我们训练出了$h_{\theta}(x)$ 。现在有一个肿瘤的各项特征为$x$ ,我们要判断它是良性$(y=1)$ 还是恶性$(y=0)$ ,把$x$ 丢进$h_{\theta}(x)$ 里,结果为$0.8$ ,那么我们就可以说这个肿瘤有$80\%$ 的概率是良性的。假如我们设置了一个阈值$0.7$ ,计算结果超过这个阈值就可以声明预测为真,那么在上面的情况中,我们就可以直接对病人说你的肿瘤是良性的,不用担心。

Decision Boundary - 判定边界

在逻辑斯谛回归中,我们一般

  • $h_{\theta}(x) > 0.5$ ,即当$\theta^{T}x > 0$ 时,预测$y=1$
  • $h_{\theta}(x) < 0.5$ ,即当$\theta^{T}x < 0$ 时,预测$y=0$

如下图(见上节)

此时阈值$0.5$

对于一般的问题,$0.5$ 的阈值足以胜任。可是假如是一些精确度要求很高的问题,就比如刚刚的判断肿瘤是否良性,或者判断是否得癌症等,那么就应该把阈值设置得高点,预测结果更准确。毕竟是人命关天的事嘛:)

假如我们的样本分布不能线性划分,如下图所示

我们可以用一个非线性的边界(高次多项式)来划分。

Cost function - 代价函数

对于前面的回归问题,我们的代价函数是所有误差的平方和取均值(实际上就是方差


$J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}\left(h_{\theta}(x^{(i)})-y^{( i)}\right)^{2}$



如果我们沿用这个计算方法,将逻辑斯谛回归的$h_{\theta}(x) = g(\theta^{T}x) = \frac{1}{1+e^{-\theta^{T}x}}$ 代入进上式的话,我们的函数图像会呈现出下面一种状况

这是一个非凸函数,它有许多的局部最小值,不利于用梯度下降法寻找全局最小值。
所以我们要对逻辑回归重新定义一个代价函数。

根据我们$h_{\theta}(x)$的性质

  • $\theta^{T}x > 0$ 时,$h_{\theta}(x) > 0.5$
  • $\theta^{T}x < 0$ 时,$h_{\theta}(x) < 0.5$
  • $h_{\theta}(x) \in (0, 1)$

我们对代价函数作出如下定义


$$Cost\left( h_{\theta}\left( x \right), y \right) =\begin{cases} -log\left( h_{\theta}\left( x \right ) \right )& \text{ if } y = 1 \\ -log\left( 1 - h_{\theta}\left( x \right ) \right )& \text{ if } y = 0 \end{cases}$$

它的函数图像和意义如下所示

  • $y = 1$

它所反映的就是当样本结果$y = 1$ 时,如果我们$h_{\theta}(x)$ 输出也$\rightarrow 1$ 的话,我们的误差就$\rightarrow 0$ ;反之,如果我们$h_{\theta}(x)$ 输出$\rightarrow 0$ 的话,我们的误差就$\rightarrow \infty$

  • $y = 0$

它所反映的就是当样本结果$y = 0$ 时,如果我们$h_{\theta}(x)$ 输出也$\rightarrow 0$ 的话,我们的误差就$\rightarrow 0$ ;反之,如果我们$h_{\theta}(x)$ 输出$\rightarrow 1$ 的话,我们的误差就$\rightarrow \infty$

没毛病:)

Simplified cost function and gradient descent - 化简代价函数与梯度下降

对于$Cost\left( h_{\theta}\left( x \right), y \right)$ ,我们可以化简成


$Cost\left( h_{\theta}\left( x \right), y \right) = -ylog\left( h_{\theta}\left( x \right) \right) - \left( 1-y \right)log\left( 1-h_{\theta}\left( x \right) \right)$



对于$J(\theta)$ 我们作如下定义


$J(\theta) = \frac{1}{m} \sum_{i=1}^{m}Cost\left( h_{\theta}\left( x^{\left( i \right)} \right), y^{\left( i \right) }\right)$



$Cost\left( h_{\theta}\left( x \right), y \right)$ 代入上式,则可得


$J(\theta) = - \frac{1}{m} \sum_{i=1}^{m} \left[ y^{\left( i \right)}log\left( h_{\theta}\left( x^{\left( i \right)} \right) \right) + \left( 1-y^{\left( i \right)} \right)log\left( 1-h_{\theta}\left( x^{\left( i \right)} \right) \right) \right]$



这时我们就可以用梯度下降来求$min_{\theta}J(\theta)$

与回归一样,我们要做的就是不断更新$\theta$


$\theta := \theta - \alpha \frac{\partial J}{\partial \theta}$



接下来我们来推导一下$\frac{\partial J}{\partial \theta}$

首先,我们有

  • $X_{m \times (n+1)}\begin{bmatrix}x_{0}^{(1)} & x_{1}^{(1)} & \cdots & x_{n}^{(1)}\\ \vdots & \vdots & \ddots & \vdots\\ x_{0}^{(m)} & x_{1}^{(m)} & \cdots & x_{n}^{(m)}\end{bmatrix} = \begin{bmatrix}1 & x_{1}^{(1)} & \cdots & x_{n}^{(1)}\\ \vdots & \vdots & \ddots & \vdots\\ 1 & x_{1}^{(m)} & \cdots & x_{n}^{(m)}\end{bmatrix}$
  • $Y_{m\times 1} = \begin{bmatrix} y^{(1)} & \cdots & y^{(m)}\end{bmatrix}^{T}$
  • $\theta = \begin{bmatrix}\theta_{0} & \theta_{1} & \cdots & \theta_{n} \end{bmatrix}^{T}$
  • $\frac{\partial J}{\partial \theta} = - \frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)}\frac{\partial log(h_{\theta}(x^{(i)}))}{\partial \theta} + ( 1-y^{(i)})\frac{\partial log(1-h_{\theta}( x^{(i)} ))}{\partial \theta} \right]$
  • $h_{\theta}(x^{(i)}) = g(\theta^{T}x^{(i)}) = \frac{1}{1+e^{-\theta^{T}x^{(i)}}}$



因为


$y^{(i)} \frac{\partial log(h_{\theta}(x^{(i)}))}{\partial \theta} = \frac{y^{(i)}}{h_{\theta}(x^{(i)})} \cdot \frac{x^{(i)}e^{-\theta^{T}x^{(i)}}}{(1+e^{-\theta^{T}x^{(i)}})^{2}}$


$= y^{(i)}(1+e^{-\theta^{T}x^{(i)}}) \cdot \frac{x^{(i)}e^{-\theta^{T}x^{(i)}}}{(1+e^{-\theta^{T}x^{(i)}})^{2}}$


$= y^{(i)} \frac{x^{(i)}e^{-\theta^{T}x^{(i)}}}{1+e^{-\theta^{T}x^{(i)}}}$


$= y^{(i)} h_{\theta}(x^{(i)})x^{(i)}e^{-\theta^{T}x^{(i)}}$



又因为


$(1-y^{(i)}) \frac{\partial log(1-h_{\theta}( x^{(i)} ))}{\partial \theta} = - (1-y^{(i)}) \frac{1}{1-h_{\theta}(x^{(i)})} \cdot \frac{x^{(i)}e^{-\theta^{T}x^{(i)}}}{(1+e^{-\theta^{T}x^{(i)}})^{2}}$


$= - (1-y^{(i)}) \frac{1+e^{-\theta^{T}x^{(i)}}}{e^{-\theta^{T}x^{(i)}}} \cdot \frac{x^{(i)}e^{-\theta^{T}x^{(i)}}}{(1+e^{-\theta^{T}x^{(i)}})^{2}}$


$= - (1-y^{(i)}) \frac{x^{(i)}}{1+e^{-\theta^{T}x^{(i)}}}$


$= - (1-y^{(i)})x^{(i)}h_{\theta}(x^{(i)})$



将上面两式相加,提出$h_{\theta}(x^{(i)})x^{(i)}$ ,得


$h_{\theta}(x^{(i)})x^{(i)} \left[y^{(i)}(1+e^{-\theta^{T}x^{(i)}}) - 1\right]$


$= x^{(i)}y^{(i)} - x^{(i)}h_{\theta}(x^{(i)})$


$= x^{(i)} (y^{(i)} - h_{\theta}(x^{(i)}))$



将上式代入$\frac{\partial J}{\partial \theta}$ ,则


$\frac{\partial J}{\partial \theta} = \frac{1}{m} \sum_{i=1}^{m}(h_{\theta}(x^{(i)}) - y^{(i)})x^{(i)}$



我们惊奇地发现,$\frac{\partial J}{\partial \theta}$ 的表达式居然跟回归是一样的!这就是数学的魅力!
因此,参考week1的推导,可得


$\frac{\partial J}{\partial \theta} = \frac{1}{m} X^{T}(X\theta - Y)$

$$\theta := \theta - \alpha \frac{1}{m} X^{T}(X\theta - Y)$$

Multi-class classification: One-vs-all - 多分类问题:一对多

在实际分类问题中,我们遇到的大多是需要分多个类的问题,比如联系人的分类有家人,朋友,同事,同学等等。在可视化图像中,它们可能会呈现出如下的分布

一对多的做法就是我们分别对这三个类训练$h_{\theta}^{(i)}(x)$ ,其中$i$ 为类别序号。如下图所示

训练完所有的$h_{\theta}^{(i)}(x)$ 后,当我们给一组输入特征$x$ 时,取最大的$h_{\theta}^{(i)}(x)$ 作为我们的预测结果。

Regularization - 正则化

The problem of overfitting - 过拟合问题

假如我们样本有非常多的特征,我们也许能训练出一个在样本集上表现得很好的假设函数$h_{\theta}(x)$ ,但是对于新的输入,我们可能不能很好地进行拟合(预测)。这类问题,我们称之为过拟合

对于过拟合问题我们一般有下面一些解决方法

  • 减少特征数量

手动剔除一些不必要的特征,或者用一些降维算法(PCA)来自动减少特征数

  • 正则化

保留所有的特征,同时减小参数$\theta$ 的大小

Cost function - 代价函数

首先看下面这两种预测函数在样本集上的结果

我们能看到,左边是比较合适的预测函数,而右边则明显过拟合了。

这时我们用一个小小的技巧,在我们的误差函数$J(\theta)$ 后面对$\theta_{3}$ $\theta_{4}$ 加一个惩罚系数(或者说补偿反馈),使之变为


$J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}\left(h_{\theta}(x^{(i)})-y^{(i)}\right)^{2} + 1000\theta_{3} + 1000\theta_{4}$



由上可知,我们要求最优的$\theta$ ,使得$J(\theta)$ 取得最小值,那么我们在优化过程中(比如梯度下降)$\theta_{3}$ $\theta_{4}$ 一定$\rightarrow 0$ ,因为他们占比很大。这样$\theta_{3}$ $\theta_{4}$ $h_{\theta}(x)$ 的贡献就非常小,$x^{3}$ $x^{4}$ 这些高次项在$h_{\theta}(x)$ 所占的权重就小很多,有效地防止了过拟合

假如我们有非常多的特征,不知道要对哪些对应的参数$\theta$ 作惩罚,那么最好的办法就是对所有的$\theta$ 作惩罚,然后让程序自己迭代优化。所以我们的代价函数$J(\theta)$ 就变成下面这种形式


$J(\theta) = \frac{1}{2m} \left[ \sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^{2} + \lambda \sum_{j=1}^{n} \theta_{j}^{2} \right]$



其中$\lambda$ 称为正则化参数。一般我们不对$\theta_{0}$ 进行惩罚。

正则化后的假设函数如下图所示

其中蓝色曲线是过拟合的情况, 紫色 曲线是正则化后的假设函数曲线,而橙色直线则是 正则化参数过大 导致的 欠拟合。为什么会这样呢?因为正则化参数过大,会对$(\theta_{1} \cdots \theta_{n})$ 惩罚过重,以至于$(\theta_{1} \cdots \theta_{n}) \rightarrow 0$ ,使得$h_{\theta}(x) \approx \theta_{0}$

因此对于正则化,我们要选一个合适的值,才有好的效果。

Regularized linear regression - 正则化后的线性回归

正则化后我们的代价函数变成


$J(\theta) = \frac{1}{2m} \left\{ \left[\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^{2} \right] + \lambda \sum_{j=1}^{n} \theta_{j}^{2} \right\}$



如果我们用梯度下降来求最优$\theta$ ,我们更新$\theta$ 就要分别更新$\theta_{0}$ $\theta_{1} \cdots \theta_{n}$


$$\begin{cases} \theta_{0} := \theta_{0} - \alpha \frac{1}{m} \sum_{i=1}^{m}( h_{\theta}(x^{(i)})-y^{(i)} )x_{0}^{(i)} \\ \theta_{j} := \theta_{j} - \alpha \left\{ \frac{1}{m} \left[\sum_{i=1}^{m}( h_{\theta}(x^{(i)})-y^{(i)} )x_{j}^{(i)} \right]+\frac{\lambda}{m}\theta_{j}\right\} & j=1,2, \cdots ,n \end{cases}$$



其中$\theta_{j}$ 可以化简成


$\theta_{j}(1-\alpha\frac{\lambda}{m}) - \alpha\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)}$



我们看到,$(1-\alpha\frac{\lambda}{m}) < 1$ ,所以正则化后的梯度下降实际上就是让$\theta_{j}$ 减少一定的比例后再进行原来的梯度下降。

我们知道,梯度$\frac{\partial J}{\partial \theta}$ $0$ 时,$J(\theta)$ 取得极小值,所以我们令


$$\begin{cases} \sum_{i=1}^{m}( h_{\theta}(x^{(i)})-y^{(i)} )x_{0}^{(i)} = 0\\ \sum_{i=1}^{m}( h_{\theta}(x^{(i)})-y^{(i)} )x_{j}^{(i)} + \lambda\theta_{j} = 0 & j=1,2, \cdots ,n \end{cases}$$


$\frac{\partial J}{\partial \theta} =\begin{bmatrix}x_{0}^{(1)} & x_{0}^{(2)} &\cdots & x_{0}^{(m)}\\ x_{1}^{(1)} & x_{1}^{(2)} & \cdots & x_{1}^{(m)}\\ \vdots & \vdots & \ddots & \vdots \\ x_{n}^{(1)} & x_{n}^{(2)} & \cdots & x_{n}^{(m)}\end{bmatrix} \begin{bmatrix}h_{\theta}(x^{(1)})-y^{(1)}\\h_{\theta}(x^{(2)})-y^{(2)}\\ \vdots\\h_{\theta}(x^{(m)})-y^{(m)}\end{bmatrix} + \lambda \begin{bmatrix}0\\ \theta_{1}\\ \vdots \\ \theta_{n}\end{bmatrix} = 0$



也即


$X^{T}(X\theta - Y) + \lambda \begin{bmatrix}0 & & & \\ & 1 & & \\ & & \ddots & \\ & & & 1\end{bmatrix}_{(n+1)^{2}} \theta = 0$



去掉括号,并提出$\theta$ ,整理等式


$(X^{T}X + \lambda\begin{bmatrix}0 & & & \\ & 1 & & \\ & & \ddots & \\ & & & 1\end{bmatrix}_{(n+1)^{2}}) \theta = X^{T}Y$



最后我们可得


$\theta = (X^{T}X + \lambda\begin{bmatrix}0 & & & \\ & 1 & & \\ & & \ddots & \\ & & & 1\end{bmatrix}_{(n+1)^{2}})^{-1} X^{T}Y$



上式就是正则化后的 Normal equation - 正规方程,其中$(X^{T}X + \lambda\begin{bmatrix}0 & & & \\ & 1 & & \\ & & \ddots & \\ & & & 1\end{bmatrix}_{(n+1)^{2}})$ 一定是可逆的。这个就不在此作证明了。

Regularized logistic regression - 正则化后的逻辑斯谛回归

与线性回归一样,我们在原来的代价函数$J(\theta)$ 后面加上一个惩罚项,则$J(\theta)$ 变成


$J(\theta) = - \left\{ \frac{1}{m} \sum_{i=1}^{m} \left[ y^{\left( i \right)}log\left( h_{\theta}\left( x^{\left( i \right)} \right) \right) + \left( 1-y^{\left( i \right)} \right)log\left( 1-h_{\theta}\left( x^{\left( i \right)} \right) \right) \right] \right\} + \frac{\lambda}{2m} \sum_{j=1}^{2} \theta_{j}^{2}$



因为其$\frac{\partial J(\theta)}{\partial \theta}$ 的形式与上面线性回归一样,所以梯度下降的过程同上。



---------------------------------END---------------------------------
手抖一下?